
import store from "../store";
//#ifdef APP-PLUS 
const ToolKit = uni.requireNativePlugin('toolkit');
//#endif
let baseUrl = store.state.baseURL;

function fetchData(obj){
	const {url,method,data={}} = obj;
	// 动态显示加载中 
	// uni.showLoading({
	// 	title:'加载中'
	// })
	const token = uni.getStorageSync('token');
	
	let isThird = url.includes('https://') ? true : false;  // 是否第三方链接
	if(!url.includes('classId=')){
		data.classId = store.state.classId;
	}
	if(data.isClass===false) {
		delete data.classId ;  // 不需要classId，可以传 isClass:false
	}
	
	
	return new Promise((resolve,reject)=>{
		uni.request({
			url:isThird ? url : baseUrl + '/back'+url,
			method,
			data:data,
			header:{
				Authorization:	token
			},
			success:(res)=>{
				
				const status = res.data.code; 
				switch(status) {
					case 401:  // 登录状态已过期
						// uni.clearStorageSync();
						// 自动登录
						handleLogin(store.state.deviceId);
					break;
				}
				resolve(res.data)
			},
			fail:(res)=>{
				uni.showToast({
					icon:'error',
					title:'你失败了'
				})
				reject('失败了')
				
			},
			complete:()=>{
				// 隐藏这个加载
				uni.hideLoading()
			}
		})
	})

}

// 轮训接口
 function repeatFun(){
	
	const time= 5000; // 5秒
	let fun = async ()=>{
		const {deviceId,userInfo,powerTime} = store.state;
		let res = await fetchData({
		        url:'/database/api/base/selectComBpBaseByBpId',
		        method:'GET',
				data:{
					startT:powerTime.startT,
					eduT:powerTime.eduT,
					bpId:deviceId,
					currentMode:userInfo.currentMode,  // 1-班牌模式 2-欢迎模式 3-考试模式
					status:'1'
				}
		 })
		 if(res.code==200){
			const {currentMode,status,startT,eduT} =  res.data;
			
			// 模式切换 1-班牌模式 2-欢迎模式 3-考试模式
			let menus = {
				'1':'/pages/index/index',
				'2':'/pages/welcome/welcome',
				'3':'/pages/exam/exam'
			}
			// 模式的选择
			if(currentMode){
				store.commit('setUserInfo',{currentMode});
				uni.reLaunch({
					url:menus[currentMode]
				})
			}
			// 状态 0-关机 1-运行 2-待机  3重启
			switch(status) {
				case '0':
					// 0-关机 
					uni.$u.toast('开始要关机了')
					ToolKit.shutdown((r)=>{
						uni.$u.toast(r)
					});
				break;
				case '1':
					uni.$u.toast('开始要开机了')
					// 开机
					ToolKit.alarmPowerOn(1000*1,(res)=>{
						uni.$u.toast(res)
					});  // 1秒开机
				break;
				
				case '3':
					uni.$u.toast('开始要重启了')
					ToolKit.reboot((res)=>{
						uni.$u.toast(res)
					});   //3重启
				break;	
			}	
			if(startT && eduT ){
				store.commit('setPowerTime',{startT,eduT});
				// uni.$u.toast('开始要设置了')
				//#ifdef APP-PLUS
				ToolKit.setPowerOnOff([`${startT}-${eduT}`],res=>{
					uni.$u.toast('设置定时开关机成功')
				})
				//#endif
			}
				
		 }
	}
	getApp().globalData.timerFun =  setInterval(()=>{
		fun();
	},time)
	
}
function SetBaseStatus(bpId){
	return new Promise((resolve,reject)=>{
		fetchData({
			url: '/database/api/base',
			method: 'put',
			data: {
				status:'1',
				bpId:bpId
			}
		}).then((res)=>{
			if(res.code==200){
				resolve(true)
			}
			
		})
	})
	
}
// 登录接口	
function handleLogin(deviceId) {
	return new Promise((resolve,reject)=>{
		fetchData({
			url: '/auth/loginPhone2',
			method: 'post',
			data: {machine:deviceId}
		}).then((res) => {
			if (res.code == 200) {
				uni.$u.toast('登录成功')
				let {ipaddr} = res.data.userInfo;
				const {status,classId,schoolId,eduId,eduLevel,gradeName,className,schoolName,currentMode,startT,eduT} = res.data.userInfo.comClassInfo
				uni.setStorageSync('token', res.data.token.access_token);
				
				store.commit('setSlassID',classId);
				store.commit('setSchoolId',schoolId);
				store.commit('setUserInfo',{ipaddr,classId,schoolId,eduId,eduLevel,gradeName,className,schoolName,currentMode});	
				
				if(classId) {
					resolve(res.data.userInfo.comClassInfo);
					store.commit('setPowerTime',{startT,eduT});		
					repeatFun();
					uni.navigateTo({
						url: '/pages/index/index'
					})
				}
				
			} else {
				uni.$u.toast('测试登录：'+res.msg)
			}
					
		})	
	})
		
}



export {fetchData,repeatFun,handleLogin,SetBaseStatus}